using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._UtilityNetworkTools._Administration
{
    /// <summary>
    /// <para>Set Edge Connectivity</para>
    /// <para>Defines how features will connect to a line or edge object of a given asset type.</para>
    /// <para>定义要素如何连接到给定资产类型的线或边对象。</para>
    /// </summary>    
    [DisplayName("Set Edge Connectivity")]
    public class SetEdgeConnectivity : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SetEdgeConnectivity()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Utility Network</para>
        /// <para>The utility network that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的公共设施网络。</para>
        /// </param>
        /// <param name="_domain_network">
        /// <para>Domain Network</para>
        /// <para>The domain network that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的域网络。</para>
        /// </param>
        /// <param name="_line_featureclass">
        /// <para>Input Table</para>
        /// <para>The name of the input feature class or table that contains the asset type with the edge connectivity to set.</para>
        /// <para>输入要素类或表的名称，其中包含要设置的边连通性的资产类型。</para>
        /// </param>
        /// <param name="_assetgroup">
        /// <para>Asset Group</para>
        /// <para>The asset group that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的资产组。</para>
        /// </param>
        /// <param name="_assettype">
        /// <para>Asset Type</para>
        /// <para>The asset type that requires the edge connectivity to set.</para>
        /// <para>需要设置边连接的资产类型。</para>
        /// </param>
        /// <param name="_edge_connectivity">
        /// <para>Edge Connectivity</para>
        /// <para><xdoc>
        ///   <para>Specifies the edge connectivity type that will be assigned to the asset type.</para>
        ///   <bulletList>
        ///     <bullet_item>Any vertex—Features will connect anywhere along the edge including end vertices.</bullet_item><para/>
        ///     <bullet_item>End vertex—Features will only connect to the end vertex of an edge.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将分配给资产类型的边连接类型。</para>
        ///   <bulletList>
        ///     <bullet_item>任何折点—要素将沿边连接任意位置，包括端点。</bullet_item><para/>
        ///     <bullet_item>端折点 - 要素将仅连接到边的端点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public SetEdgeConnectivity(object _in_utility_network, object _domain_network, object _line_featureclass, object _assetgroup, object _assettype, _edge_connectivity_value? _edge_connectivity)
        {
            this._in_utility_network = _in_utility_network;
            this._domain_network = _domain_network;
            this._line_featureclass = _line_featureclass;
            this._assetgroup = _assetgroup;
            this._assettype = _assettype;
            this._edge_connectivity = _edge_connectivity;
        }
        public override string ToolboxName => "Utility Network Tools";

        public override string ToolName => "Set Edge Connectivity";

        public override string CallName => "un.SetEdgeConnectivity";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_utility_network, _domain_network, _line_featureclass, _assetgroup, _assettype, _edge_connectivity.GetGPValue(), _out_utility_network];

        /// <summary>
        /// <para>Input Utility Network</para>
        /// <para>The utility network that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的公共设施网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Utility Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Domain Network</para>
        /// <para>The domain network that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的域网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Domain Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _domain_network { get; set; }


        /// <summary>
        /// <para>Input Table</para>
        /// <para>The name of the input feature class or table that contains the asset type with the edge connectivity to set.</para>
        /// <para>输入要素类或表的名称，其中包含要设置的边连通性的资产类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _line_featureclass { get; set; }


        /// <summary>
        /// <para>Asset Group</para>
        /// <para>The asset group that contains the asset type with the edge connectivity to set.</para>
        /// <para>包含要设置的边连接的资产类型的资产组。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Asset Group")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _assetgroup { get; set; }


        /// <summary>
        /// <para>Asset Type</para>
        /// <para>The asset type that requires the edge connectivity to set.</para>
        /// <para>需要设置边连接的资产类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Asset Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _assettype { get; set; }


        /// <summary>
        /// <para>Edge Connectivity</para>
        /// <para><xdoc>
        ///   <para>Specifies the edge connectivity type that will be assigned to the asset type.</para>
        ///   <bulletList>
        ///     <bullet_item>Any vertex—Features will connect anywhere along the edge including end vertices.</bullet_item><para/>
        ///     <bullet_item>End vertex—Features will only connect to the end vertex of an edge.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将分配给资产类型的边连接类型。</para>
        ///   <bulletList>
        ///     <bullet_item>任何折点—要素将沿边连接任意位置，包括端点。</bullet_item><para/>
        ///     <bullet_item>端折点 - 要素将仅连接到边的端点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Edge Connectivity")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _edge_connectivity_value? _edge_connectivity { get; set; }

        public enum _edge_connectivity_value
        {
            /// <summary>
            /// <para>Any vertex</para>
            /// <para>Any vertex—Features will connect anywhere along the edge including end vertices.</para>
            /// <para>任何折点—要素将沿边连接任意位置，包括端点。</para>
            /// </summary>
            [Description("Any vertex")]
            [GPEnumValue("ANY_VERTEX")]
            _ANY_VERTEX,

            /// <summary>
            /// <para>End vertex</para>
            /// <para>End vertex—Features will only connect to the end vertex of an edge.</para>
            /// <para>端折点 - 要素将仅连接到边的端点。</para>
            /// </summary>
            [Description("End vertex")]
            [GPEnumValue("END_VERTEX")]
            _END_VERTEX,

        }

        /// <summary>
        /// <para>Updated Utility Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Utility Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        public SetEdgeConnectivity SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}